package com.szxy.cart.inteceptor;

import com.szxy.cart.service.CheckUserTokenService;
import com.szxy.pojo.TbUser;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * @Auther:zwer
 * @Date:2019/9/26 14:14
 * @Description:com.szxy.cart.inteceptor
 * @Version:1.0
 * 在结算下判断用户是否已经登录
 **/
@Component
public class UserLoginInterceptor implements HandlerInterceptor {

    // 这里不可以直接注入 CommonRedisFeignClient 对象，否则会报空指针
    // 由于拦截器对象初始化早已 CommonRedisFeignClient 对象
    @Autowired
    private CheckUserTokenService checkUserTokenService;


    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        // 从请求参数中获取用户的 token 信息
        String token = request.getParameter("token");
        if(StringUtils.isBlank(token)){
            System.out.println("token is null .....");
            return false; //若前端接收到 false ，则会跳转到用户登录界面，让用户登录
        }
        // 防止用户浏览器中 token 存在，但是 Redis 中的 token 已经过期的情况
        TbUser user = this.checkUserTokenService.checkUserToken(token);
        if(user == null){
            System.out.println("user is null ..........");
            return false;
        }
        return true; // 放行
    }
}
